clc
% 提示用户输入一个符号表达式
f_str = input('请输入一个符号表达式，例如：log(z)+cos(z)：', 's');

% 将 ln 函数转换为 log 函数
f_str = strrep(f_str, 'ln(', 'log(');

% 将输入的字符串转化为符号表达式
syms z;
f = str2sym(f_str);

% 输出原函数 f(z)
fprintf('原函数：\n');
disp(f);

% 输入待求导点的值
z0_real = input('请输入待求函数导数的实部值：');
z0_imag = input('请输入待求函数导数的虚部值：');
z0 = z0_real + 1i * z0_imag;

% 利用复合函数求导法则求解一阶导数
df = diff(f, z);
df = subs(df, z, log(z));
df = subs(df, z, z0);
df = df*1/z0; % 加上 z 对 t 的导数

% 利用复合函数求导法则求解三阶导数
ddf = diff(f, z, 3);
ddf = subs(ddf, z, log(z));
ddf = subs(ddf, z, z0);
ddf = ddf * (1 / ((z0)^3));

% 打印结果
fprintf('在 z = %.2f + %.2fi 处的一阶导数为：\n%s\n', real(z0), imag(z0), char(df));
fprintf('在 z = %.2f + %.2fi 处的三阶导数为：\n%s\n', real(z0), imag(z0), char(ddf));
